#include <fstream>
using namespace std;

typedef int Heap[100001]; 

int n,i;
Heap a;

void cobor(Heap a, int n , int k)
{
	int p;
	p=1;
	while (p)
	{
		p=0;
        if (2*k<=n) 
		{
            p=2*k; 
            if ( (2*k+1<=n) && (a[2*k+1]>a[2*k]) ) 
                p++; 
            if (a[p] <= a[k])
                p=0;
        }
        if (p) // p => p!=0 
		{
            swap(a[k],a[p]); 
            k=p;
        }
	}
}

void urcare(Heap a, int n, int k) 
{
	int p=a[k];
	while ( (k>1) && (p>a[k/2]) ) // k/2 e tatal 
	{
		a[k]=a[k/2];
		k=k/2;
	}
   a[k]=p;
}

void constr_heap(Heap& a, int n) 
{
    for (int i=n/2;i>0;--i) 
        cobor(a,n,i);
}

void elimin(Heap a, int& n, int k) 
{
    a[k]=a[n]; 
    --n; 
    if ( (k>1) && (a[k]>a[k/2]) ) 
        urcare(a,n,k); 
	else                          
        cobor(a,n,k);
}

void insert(Heap a, int& n, int val) 
{
    a[++n]=val;
    urcare(a, n, n); // urcam elementul in locul potrivit
}

void heapsort(Heap& a, int n)
{
	constr_heap(a,n);
	for (int i=n;i>=2;--i)
	{
        swap(a[1],a[i]);
        cobor(a,i-1,1);
	}
}

int main()
{
	freopen("heapsort.in","r",stdin);
	freopen("heapsort.out","w",stdout);
	scanf("%d",&n);
	for (i=1;i<=n;i++)
		scanf("%d",&a[i]);
	heapsort(a,n);
	for (i=1;i<=n;++i)
		printf("%d ",a[i]);
	return 0;
}


/////////
/////////
////////


typedef int Heap[100001]; 
Heap a;

void DownHeap(Heap a, int n , int k)
{
	int p;
	p=1;
	while (p)
	{
		p=0;
        if (2*k<=n) 
		{
            p=2*k; 
            if ( (2*k+1<=n) && (a[2*k+1]<a[2*k]) ) 
                p++; 
            if (a[p] >= a[k])
                p=0;
        }
        if (p) 
		{
            swap(a[k],a[p]); 
            k=p;
        }
	}
}

void UpHeap(Heap a, int n, int k) 
{
	int p=a[k];
	while ( (k>1) && (p<a[k/2]) ) 
	{
		a[k]=a[k/2];
		k=k/2;
	}
   a[k]=p;
}

void constr_heap(Heap& a, int n) 
{
    for (int i=n/2;i>0;--i) 
        DownHeap(a,n,i);
}

void Earse(Heap a, int& n, int k) 
{
    a[k]=a[n]; 
    --n; 
    if ( (k>1) && (a[k]<a[k/2]) ) 
        UpHeap(a,n,k); 
	else                          
        DownHeap(a,n,k);
}

void Insert(Heap a, int& n, int val) 
{
    a[++n]=val;
    UpHeap(a, n, n); 
}

